import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QDesktopWidget
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile
from PyQt5.QtCore import QUrl, Qt, QPoint, QTimer


class BrowserWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.browser = QWebEngineView()
        # self.browser.setUrl(QUrl('http://127.0.0.1:8080'))  # 指定 Flask Web 地址
        self.browser.setUrl(QUrl('http://localhost/chat/QKcfApM8d5tjHW7U'))

        self.setWindowTitle('Floating Browser Window')

        # 获取屏幕大小
        screen = QApplication.primaryScreen()
        screen_geometry = screen.geometry()
        screen_width = screen_geometry.width()
        screen_height = screen_geometry.height()

        # 获取系统的 DPI（像素每英寸）
        dpi = screen.logicalDotsPerInch()

        # 计算适合的缩放因子，通常屏幕 DPI 越高，缩放因子需要越小
        zoom_factor = dpi / 120  # 假设标准 DPI 为 96

        # 设置浏览器缩放因子
        self.browser.setZoomFactor(zoom_factor)

        # 设置窗口初始位置为屏幕右下角，并纵向从1/4开始
        
        window_height = int(screen_height*3/4 - screen_height/10)
        window_width = int(window_height*0.5)

        # 计算窗口的位置
        x_pos = screen_width - window_width  # 水平方向放置在右侧
        y_pos = int(screen_height / 4)  # 垂直方向从屏幕高度的1/4开始

        # 调整一下纵向位置，确保不会遮挡任务栏，留一些空间
        y_pos = min(y_pos, screen_height - window_height - 50)  # 保证窗口不会超过屏幕底部并留一些空间

        self.setGeometry(x_pos, y_pos, window_width, window_height)

        # 设置无边框窗口
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)  # Floating and no borders
        self.setAttribute(Qt.WA_TranslucentBackground, True)  # Transparent background

        # 鼠标拖动相关
        self.is_dragging = False
        self.last_position = QPoint()

        # 设置中央部件
        self.setCentralWidget(self.browser)

        # 启动一个定时器定期获取鼠标位置进行拖动
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.track_mouse_move)
        self.timer.start(10)  # 每10毫秒检测一次鼠标位置

        self.show()

    def keyPressEvent(self, event):
        """监听按键事件，空格键按下时启用拖动模式"""
        if event.key() == Qt.Key_Space:
            self.is_dragging = True  # 开启拖动模式
            self.last_position = self.cursor().pos()  # 获取初始鼠标位置
        if event.key() == Qt.Key_F1:
            self.setWindowFlags(Qt.FramelessWindowHint)
        super().keyPressEvent(event)

    def keyReleaseEvent(self, event):
        """监听按键事件，空格键释放时停止拖动模式"""
        if event.key() == Qt.Key_Space:
            self.is_dragging = False  # 停止拖动模式
        super().keyReleaseEvent(event)

    def track_mouse_move(self):
        """定期获取鼠标位置并移动窗口"""
        if self.is_dragging:
            cursor_pos = self.cursor().pos()  # 获取当前鼠标位置
            # 计算鼠标的偏移量
            delta = cursor_pos - self.last_position
            self.move(self.pos() + delta)  # 更新窗口位置
            self.last_position = cursor_pos  # 更新鼠标位置


# 主函数
def main():
    app = QApplication(sys.argv)
    window = BrowserWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
